{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 调树参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# read in data，数据在xgboost安装的路径下的demo目录,现在我们将其copy到当前代码下的data目录\n",
    "dpath = './data/'\n",
    "dtrain = xgb.DMatrix(dpath + 'RentListingInquries_FE_train.bin')\n",
    "dtest = xgb.DMatrix(dpath + 'RentListingInquries_FE_test.bin')\n",
    "train = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "test = pd.read_csv(dpath + 'RentListingInquries_FE_test.csv')\n",
    "\n",
    "\n",
    "\n",
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 准备交叉验证\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（227），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "粗调，参数的步长为2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:667: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60046, std: 0.00164, params: {'min_child_weight': 1, 'max_depth': 3},\n",
       "  mean: -0.60015, std: 0.00191, params: {'min_child_weight': 3, 'max_depth': 3},\n",
       "  mean: -0.60046, std: 0.00187, params: {'min_child_weight': 5, 'max_depth': 3},\n",
       "  mean: -0.58872, std: 0.00366, params: {'min_child_weight': 1, 'max_depth': 5},\n",
       "  mean: -0.58884, std: 0.00262, params: {'min_child_weight': 3, 'max_depth': 5},\n",
       "  mean: -0.58813, std: 0.00247, params: {'min_child_weight': 5, 'max_depth': 5},\n",
       "  mean: -0.59055, std: 0.00269, params: {'min_child_weight': 1, 'max_depth': 7},\n",
       "  mean: -0.58892, std: 0.00208, params: {'min_child_weight': 3, 'max_depth': 7},\n",
       "  mean: -0.58776, std: 0.00241, params: {'min_child_weight': 5, 'max_depth': 7},\n",
       "  mean: -0.60417, std: 0.00428, params: {'min_child_weight': 1, 'max_depth': 9},\n",
       "  mean: -0.59822, std: 0.00241, params: {'min_child_weight': 3, 'max_depth': 9},\n",
       "  mean: -0.59522, std: 0.00301, params: {'min_child_weight': 5, 'max_depth': 9}],\n",
       " {'max_depth': 7, 'min_child_weight': 5},\n",
       " -0.58776480777120377)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=227,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 199.84463043,  203.000811  ,  202.72499518,  283.11359315,\n",
       "         281.19188323,  285.06010442,  370.01516366,  369.07150955,\n",
       "         363.83541026,  451.05339875,  443.79098344,  399.08862653]),\n",
       " 'mean_score_time': array([ 0.49942851,  0.50242867,  0.49642839,  0.70244021,  0.69443974,\n",
       "         0.69583983,  1.07786164,  1.03465924,  1.00045719,  2.01491523,\n",
       "         1.94891148,  1.31307511]),\n",
       " 'mean_test_score': array([-0.60045818, -0.60015015, -0.6004647 , -0.58872035, -0.58883848,\n",
       "        -0.58812666, -0.59054641, -0.58891651, -0.58776481, -0.60416982,\n",
       "        -0.59822457, -0.59521846]),\n",
       " 'mean_train_score': array([-0.57836061, -0.57890528, -0.57945618, -0.51063605, -0.51664675,\n",
       "        -0.51993015, -0.40745838, -0.42823897, -0.44198599, -0.28321426,\n",
       "        -0.32969796, -0.35621652]),\n",
       " 'param_max_depth': masked_array(data = [3 3 3 5 5 5 7 7 7 9 9 9],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 3 5 1 3 5 1 3 5 1 3 5],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': ({'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}),\n",
       " 'rank_test_score': array([10,  9, 11,  3,  4,  2,  6,  5,  1, 12,  8,  7]),\n",
       " 'split0_test_score': array([-0.59776967, -0.59671761, -0.59715434, -0.58217184, -0.58425439,\n",
       "        -0.58414823, -0.58704852, -0.58596542, -0.58378345, -0.59888384,\n",
       "        -0.59391278, -0.59101661]),\n",
       " 'split0_train_score': array([-0.5795878 , -0.58002115, -0.58065245, -0.51253903, -0.51865812,\n",
       "        -0.52215121, -0.40708079, -0.42735211, -0.44158158, -0.28601838,\n",
       "        -0.33147635, -0.35638789]),\n",
       " 'split1_test_score': array([-0.60128792, -0.60143756, -0.60111925, -0.59167846, -0.58996128,\n",
       "        -0.58922597, -0.591654  , -0.58941326, -0.58910197, -0.60148578,\n",
       "        -0.59948746, -0.59459955]),\n",
       " 'split1_train_score': array([-0.57665353, -0.57764875, -0.5779799 , -0.50956866, -0.51544012,\n",
       "        -0.51954427, -0.40765968, -0.42955951, -0.44182075, -0.28280015,\n",
       "        -0.33035705, -0.35706881]),\n",
       " 'split2_test_score': array([-0.59938753, -0.59937771, -0.59977457, -0.58770013, -0.58811442,\n",
       "        -0.58722323, -0.59008775, -0.58723054, -0.58661766, -0.60673314,\n",
       "        -0.59795317, -0.59402001]),\n",
       " 'split2_train_score': array([-0.57890885, -0.57938763, -0.58004105, -0.51025785, -0.51608854,\n",
       "        -0.51858841, -0.40637863, -0.42751872, -0.44173452, -0.28137812,\n",
       "        -0.32842866, -0.35496482]),\n",
       " 'split3_test_score': array([-0.60207118, -0.60158769, -0.60210882, -0.59236805, -0.59208611,\n",
       "        -0.59167447, -0.5950163 , -0.59178434, -0.59087826, -0.61107388,\n",
       "        -0.60116029, -0.60019423]),\n",
       " 'split3_train_score': array([-0.57821781, -0.57821598, -0.57909939, -0.51000534, -0.51623597,\n",
       "        -0.51914841, -0.40668428, -0.42785463, -0.44257466, -0.28319356,\n",
       "        -0.32820819, -0.35785868]),\n",
       " 'split4_test_score': array([-0.601775  , -0.60163066, -0.60216702, -0.58968355, -0.58977651,\n",
       "        -0.58836146, -0.58892499, -0.59018939, -0.5884429 , -0.60267202,\n",
       "        -0.59860927, -0.59626221]),\n",
       " 'split4_train_score': array([-0.57843508, -0.57925292, -0.57950811, -0.51080935, -0.51681101,\n",
       "        -0.52021843, -0.40948853, -0.4289099 , -0.44221844, -0.28268112,\n",
       "        -0.33001955, -0.35480242]),\n",
       " 'std_fit_time': array([  1.82652963,   1.36304647,   4.28131781,   6.05309783,\n",
       "          5.81337084,   7.19836633,   9.50793884,   7.29156028,\n",
       "         12.51588507,  12.22400627,   7.41803487,  58.9103408 ]),\n",
       " 'std_score_time': array([ 0.08195489,  0.06444157,  0.07793935,  0.01954182,  0.01070757,\n",
       "         0.0073597 ,  0.05572176,  0.04006028,  0.0222508 ,  0.12321146,\n",
       "         0.45260978,  0.29016147]),\n",
       " 'std_test_score': array([ 0.00163701,  0.00191286,  0.00186893,  0.00365818,  0.00261639,\n",
       "         0.00246968,  0.0026938 ,  0.00208056,  0.00241289,  0.0042809 ,\n",
       "         0.00240949,  0.00301081]),\n",
       " 'std_train_score': array([ 0.00097433,  0.00085471,  0.00090361,  0.00103262,  0.00109626,\n",
       "         0.00123097,  0.00110179,  0.00085405,  0.00036184,  0.0015291 ,\n",
       "         0.00122728,  0.00118481])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587765 using {'min_child_weight': 5, 'max_depth': 7}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xd41a9b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
